import axios from 'axios'
import { ElMessage } from 'element-plus'
import router from '@/router'
import { API_CONFIG } from '@/config'
import { getToken, clearAuth } from '@/utils/auth'

// 创建axios实例
const service = axios.create({
    baseURL: API_CONFIG.API_URL, // 使用配置文件中的完整API地址
    timeout: 10000
})

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 获取token
        const token = getToken()

        // 除了登录接口，其他所有接口都需要添加Authorization请求头
        if (token && config.url !== API_CONFIG.USER_LOGIN) {
            config.headers['Authorization'] = token
        }

        return config
    },
    error => {
        console.error('请求错误:', error)
        return Promise.reject(error)
    }
)

// 响应拦截器
service.interceptors.response.use(
    response => {
        const { data } = response

        // 处理登录过期的情况
        if (data.code === 403 || (data.nsg && data.nsg.includes('登录过期'))) {
            ElMessage.error('登录已过期，请重新登录')
            // 清除本地存储的token和用户信息
            clearAuth()
            // 跳转到登录页
            router.push('/login')
            return Promise.reject(new Error('登录已过期'))
        }

        // 根据后端返回格式判断请求是否成功
        if (data.code === 200 || data.success) {
            return data.data || data
        } else {
            // 不在这里显示错误消息，让组件自己处理
            return Promise.reject(new Error(data.msg || data.message || data.nsg || '请求失败'))
        }
    },
    error => {
        console.error('响应错误:', error)

        // 处理401未授权错误
        if (error.response && error.response.status === 401) {
            ElMessage.error('登录已过期，请重新登录')
            // 清除本地存储的token和用户信息
            clearAuth()
            // 跳转到登录页
            router.push('/login')
        } else {
            ElMessage.error(error.message || '网络错误')
        }

        return Promise.reject(error)
    }
)

export default service 